From: Keir Fraser Date: Thu, 4 Feb 2010 13:16:39 +0000 (+0000) Subject: libxc: Reorder functions in xc_misc.c to avoid weak symbol problem X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~12643 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/success//%22http:/www.example.com/cgi/success/?a=commitdiff_plain;h=e670c28c9f0b284c05e4e8a6c4001899b13129c8;p=xen.git libxc: Reorder functions in xc_misc.c to avoid weak symbol problem Using a function, and then declaring it weak later, has undefined behaviour: cc1: warnings being treated as errors xc_misc.c:388: error: weak declaration of 'xc_map_foreign_bulk' after first use results in unspecified behavior So swap the functions xc_map_foreign_pages and xc_map_foreign_bulk. Signed-off-by: Ian Jackson --- diff --git a/tools/libxc/xc_misc.c b/tools/libxc/xc_misc.c index 317cfe1c16..662c2982fa 100644 --- a/tools/libxc/xc_misc.c +++ b/tools/libxc/xc_misc.c @@ -370,37 +370,6 @@ int xc_hvm_set_mem_type( } -void *xc_map_foreign_pages(int xc_handle, uint32_t dom, int prot, - const xen_pfn_t *arr, int num) -{ - void *res; - int i, *err; - - if (num < 0) { - errno = -EINVAL; - return NULL; - } - - err = malloc(num * sizeof(*err)); - if (!err) - return NULL; - - res = xc_map_foreign_bulk(xc_handle, dom, prot, arr, err, num); - if (res) { - for (i = 0; i < num; i++) { - if (err[i]) { - errno = -err[i]; - munmap(res, num * PAGE_SIZE); - res = NULL; - break; - } - } - } - - free(err); - return res; -} - /* stub for all not yet converted OSes */ void * #ifdef __GNUC__ @@ -445,6 +414,37 @@ xc_map_foreign_bulk(int xc_handle, uint32_t dom, int prot, return ret; } +void *xc_map_foreign_pages(int xc_handle, uint32_t dom, int prot, + const xen_pfn_t *arr, int num) +{ + void *res; + int i, *err; + + if (num < 0) { + errno = -EINVAL; + return NULL; + } + + err = malloc(num * sizeof(*err)); + if (!err) + return NULL; + + res = xc_map_foreign_bulk(xc_handle, dom, prot, arr, err, num); + if (res) { + for (i = 0; i < num; i++) { + if (err[i]) { + errno = -err[i]; + munmap(res, num * PAGE_SIZE); + res = NULL; + break; + } + } + } + + free(err); + return res; +} + /* * Local variables: * mode: C